package pointer

import "fmt"

func Pointer_one() {
	// Go 语言指针
	// Go 语言的取地址符是 &，放到一个变量前使用
	//var a int = 10
	//println("变量a内存地址： ",&a)

	// 什么是指针
	//	一个指针变量指向了一个值的内存地址。
	// 类似于变量和常量，在使用指针前你需要声明指针。指针声明格式如下：
	// var var_name *var-type

	var a int = 20 /* 声明实际变量 */
	var ip *int    /* 声明指针变量 */

	ip = &a /* 指针变量的存储地址 */

	fmt.Printf("a 变量的地址是: %x\n", &a)

	/* 指针变量的存储地址 */
	fmt.Printf("ip 变量储存的指针地址: %x\n", ip)

	/* 使用指针访问值 */
	fmt.Printf("*ip 变量的值: %d\n", *ip)

	// 空指针
	// 当一个指针被定义后没有分配到任何变量时，它的值为 nil。
	//
	//nil 指针也称为空指针。
	//
	//nil在概念上和其它语言的null、None、nil、NULL一样，都指代零值或空值。
	//
	//一个指针变量通常缩写为 ptr。
	var ptr *int
	fmt.Println("ptr 的值为 : %x\\n", ptr)

	/* ptr 不是空指针 */
	if ptr != nil {
		println("非空")
	}
	/* ptr 是空指针 */
	if ptr == nil {
		println("空指针")
	}

}
